package com.huangsm.book.designmodel.nio;

import lombok.extern.slf4j.Slf4j;

import java.nio.ByteBuffer;

/**
 * 更好的理解Buffer,Buffer工作原理
 * @author huang
 * @PACKAGE_NAME com.huangsm.book.designmodel.nio
 * @PROJECT_NAME concurrence
 * @date 2019/2/18
 */
@Slf4j
public class ByteBufferDemo {
    /**
     * @param args
     */
    public static void main(String[] args) {
        //15个字节大小的缓冲区
        ByteBuffer b=ByteBuffer.allocate(15);
        log.info("limit:{},capacity:{},position:{}",b.limit(),b.capacity(),b.position());//15,15,0
        //存入10个字节数据
        for(int i=0;i<10;i++){
            b.put((byte) i);
        }
        log.info("limit:{},capacity:{},position:{}",b.limit(),b.capacity(),b.position());//15,15,10
        /**
         *重置position,也相当于写模式转换模式。
         * flip()操作不仅重置了当前的position为0，还将limit设置为当前position的位置，
         * 这样做的目的是防止在读模式中，读到应用程序根本没有进行操作的区域。
         */

        b.flip();
        log.info("limit:{},capacity:{},position:{}",b.limit(),b.capacity(),b.position());//10,15,0
        for(int i=0;i<5;i++){
            System.out.println(b.get());
        }
        log.info("limit:{},capacity:{},position:{}",b.limit(),b.capacity(),b.position());//10,15,5
        b.flip();
        log.info("limit:{},capacity:{},position:{}",b.limit(),b.capacity(),b.position());//5,15,0

    }
}
